package com.cskaoyan.javase.oop1._6constructor._2notice;

/**
 * 构造器使用过程中的注意事项:
 *      1.(重要)当一个类中,提供任何一个构造器时,默认无参就不会再提供了
 *          所以建议大家在需求的情况下,可以给一个类手动加上默认无参
 *
 *      2.(重要)一个类中,可以定义多个构造器,这些构造器之间是方法重载的关系.
 *          切记形参名不能不算方法重载
 *
 *      3.一个类,类中结构的定义顺序:
 *          a.开头就定义成员变量
 *          b.成员变量下面定义构造器
 *          c.构造器的下面定义成员方法
 *
 *     4.构造器中是可以使用this关键字的
 *          和成员方法中的this关键字一样指向当前对象
 *          所以可以访问自身成员变量,和调用成员方法
 *
 *     5.在定义构造器时,普遍选择快捷键自动生成的标准格式构造器
 *          一般不要乱改它,不要乱加东西
 *          除非有必要
 *          场景:
 *          比如类中的某个成员变量在赋值时,需要依赖于一个方法调用(或者需要依赖几行算法完成)
 *          在这种情况下,建议单独写一个方法
 *          然后在构造器中调用该方法
 *          不要将过多的代码逻辑写在构造器中,保持构造器代码的简洁.
 *
 * @since 10:05
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Student s1 = new Student(750, "张三", 18);
        System.out.println(s1.name);
        System.out.println(s1.age);
    }
}

class Student {
    double score;
    String name;
    int age;
    int id;
    double mathScore;
    double chineseScore;
    double englishScore;


    public Student(int age) {
        this.age = age;
    }

    /*public Student(int id) {
        this.id = id;
    }*/

    public Student(double score, String name, int age) {
        // this.sleep();
        init();
        this.name = name;
        this.age = age;
    }

    // 该方法完成对象初始化时,score的赋值
    public void init() {
        score = englishScore + chineseScore + mathScore;
    }

    public void sleep() {
        System.out.println("你这个年龄段,你怎么睡得着觉的?");
    }

}